<?php
/**
 * 多语言类
 * 
 * @version $Id: I18n.php 176 2011-05-18 03:23:41Z linsir123 $
 */
class I18n
{
	/**
	 * @var 当前语言版本
	 */
	public $language;
	
	/**
	 * @var 是否支持多语言
	 */
	public $multilingual;
	
	/**
	 * @var 多语言数据流
	 */
	public $data = array();
	
	/**
	 * @var 数据是否保存在MC中
	 */
	public $mc = false;
	
	/**
	 * 构造函数
	 */
	public function __construct()
	{
		$app = App::instance();
		
		///
		$this->language = $app->language;
		$this->multilingual = $app->multilingual && $this->language;
		if ($this->multilingual) {
			App::import('I18n/class/gettext.php');
			App::import('I18n/class/streams.php');
			
			///
			$this->loadTextDomain('default', CORE_DIR."i18n/mo/{$this->language}.mo");
		}
	}
	
	/**
	 * 加载语言包
	 */
	public function loadTextDomain($domain, $mofile) 
	{
		if ($this->multilingual && file_exists($mofile) && is_readable($mofile)) {
			$readFile = true;
			if ($this->mc) {
				$mc = App::getMc();
				$mcKey = 'i18n:'.$domain;
				$this->data[$domain] = $mc->get($mcKey);
				$readFile = $this->data[$f] === false;
			}
			
			if ($readFile) {
				$input = new CachedFileReader($mofile);
				$this->data[$domain] = new gettext_reader($input);
				if ($this->mc) 
					$mc->add($mcKey, $this->data[$domain]);
			}
		}
	}
	
	/**
	 * 返回多语言
	 */
	public function translate($var, $domain = 'default')
	{
		if ($this->multilingual && isset($this->data[$domain])) 
			return $this->data[$domain]->translate($var);
		
		return $var;
	}
	
	
	/// 以下方法提供为静态调用  ///
	
	
	/**
	 * 返回多语言
	 */
	static function __($var)
	{
		$var = App::getI18n()->translate($var);
		$params = func_get_args();
		if (count($params) > 1) {
			$params[0] = $var;
			$var = call_user_func_array('sprintf', $params);
		}
		
		return $var;
	}
	
	/**
	 * 打印多语言
	 */
	static function _e($var)
	{
		$params = func_get_args();
		echo call_user_func_array('__', $params);
	}
}
